home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / tex / mf / inputs / dc / dxrueast.mf < prev    next >
Text File  |  1994-04-12  |  46KB  |  1,056 lines

  1. % This is DXRUEAST.MF in text format, as of March 24, 1992
  2. %
  3. % DC fonts Version 1.1 (prerelease of EC fonts)
  4. %
  5. %          [ heavily borrowed from the Computer Modern Roman family of
  6. %            fonts by D. E. Knuth ]
  7. %
  8. % Content:
  9. %
  10. %   uppercase accented letters (common to roman and italic fonts)
  11. %
  12. %   "eastern part"
  13. %
  14. %   oct"200" .. oct"235"
  15. %
  16. %
  17. %   Roman uppercase accents
  18. %
  19. %       oct"200"    A  with breve
  20. %       oct"201"    A  with ogonek
  21. %       oct"202"    C  with acute
  22. %       oct"203"    C  with hacek
  23. %       oct"204"    D  with hacek
  24. %       oct"205"    E  with hacek
  25. %       oct"206"    E  with ogonek
  26. %       oct"207"    G  with breve
  27. %
  28. %       oct"210"    L  with acute
  29. %       oct"211"    L  with komma
  30. %       oct"212"    L  with (polnisches L)
  31. %       oct"213"    N  with acute
  32. %       oct"214"    N  with hacek
  33. %       oct"215"    the letter eng
  34. %       oct"216"    O  with ungarian umlauts
  35. %       oct"217"    R  with acute
  36. %
  37. %       oct"220"    R  with hacek
  38. %       oct"221"    S  with acute
  39. %       oct"222"    S  with hacek
  40. %       oct"223"    S  with cedille
  41. %       oct"224"    T  with hacek
  42. %       oct"225"    T  with cedille
  43. %       oct"226"    U  with hungarian umlauts
  44. %       oct"227"    U  with circ
  45. %
  46. %       oct"230"    Y with  umlauts
  47. %       oct"231"    Z with  acute
  48. %       oct"232"    Z with  hacek
  49. %       oct"233"    Z with  dot
  50. %       oct"234"    IJ
  51. %       oct"235"    I with  dot
  52. %
  53.  
  54.  
  55. dcchar "The letter breve A";
  56. beginchar(oct"200",13u#,cap_height#+acc_height#,0);
  57. adjust_fit(cap_serif_fit#,cap_serif_fit#);
  58. numeric left_stem,right_stem,outer_jut,alpha;
  59. right_stem=cap_stem-stem_corr;
  60. left_stem=min(cap_hair if hefty: -3stem_corr fi,right_stem);
  61. outer_jut=.8cap_jut; x1l=w-x4r=l+letter_fit+outer_jut+.5u; y1=y4=0;
  62. x2-x1=x4-x3; x3r=x2r+apex_corr; y2=y3=cap_height+apex_o+apex_oo;
  63. alpha=diag_ratio(2,left_stem,y2-y1,x4r-x1l-apex_corr);
  64. penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0);
  65. penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0);
  66. z0=whatever[z1r,z2r]=whatever[z3l,z4l];
  67. if y0<cap_height-cap_notch_cut: y0:=cap_height-cap_notch_cut;
  68.  fill z0+.5right{down}...{z4-z3}diag_end(3l,4l,1,1,4r,3r)
  69.   --diag_end(4r,3r,1,1,2l,1l)--diag_end(2l,1l,1,1,1r,2r){z2-z1}
  70.   ...{up}z0+.5left--cycle; % left and right diagonals
  71. else: fill z0--diag_end(0,4l,1,1,4r,3r)--diag_end(4r,3r,1,1,2l,1l)
  72.   --diag_end(2l,1l,1,1,1r,0)--cycle; fi % left and right diagonals
  73. penpos5(whatever,angle(z2-z1)); z5=whatever[z1,z2];
  74. penpos6(whatever,angle(z3-z4)); z6=whatever[z3,z4]; y6=y5;
  75. if hefty: y5r else: y5 fi =5/12y0;
  76. y5r-y5l=y6r-y6l=cap_band; penstroke z5e--z6e; % bar line
  77. if serifs: numeric inner_jut; pickup tiny.nib;
  78.  prime_points_inside(1,2); prime_points_inside(4,3);
  79.  if rt x1'r+cap_jut+.5u+1<=lft x4'l-cap_jut: inner_jut=cap_jut;
  80.  else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi
  81.  dish_serif(1',2,a,1/2,outer_jut,b,.6,inner_jut)(dark);  % left serif
  82.  dish_serif(4',3,c,1/2,inner_jut,d,1/3,outer_jut); fi  % right serif
  83. % the accent
  84. uppercase_breve(x2,0,12,13,14);
  85. penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14); endchar;
  86.  
  87.  
  88. dcchar "The letter ogonek A";
  89. beginchar(oct"201",13u#,cap_height#,0.875desc_depth#);
  90. adjust_fit(cap_serif_fit#,cap_serif_fit#);
  91. numeric left_stem,right_stem,outer_jut,alpha;
  92. right_stem=cap_stem-stem_corr;
  93. left_stem=min(cap_hair if hefty: -3stem_corr fi,right_stem);
  94. outer_jut=.8cap_jut; x1l=w-x4r=l+letter_fit+outer_jut+.5u; y1=y4=0;
  95. x2-x1=x4-x3; x3r=x2r+apex_corr; y2=y3=cap_height+apex_o+apex_oo;
  96. alpha=diag_ratio(2,left_stem,y2-y1,x4r-x1l-apex_corr);
  97. penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0);
  98. penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0);
  99. z0=whatever[z1r,z2r]=whatever[z3l,z4l];
  100. if y0<cap_height-cap_notch_cut: y0:=cap_height-cap_notch_cut;
  101.  fill z0+.5right{down}...{z4-z3}diag_end(3l,4l,1,1,4r,3r)
  102.   --diag_end(4r,3r,1,1,2l,1l)--diag_end(2l,1l,1,1,1r,2r){z2-z1}
  103.   ...{up}z0+.5left--cycle; % left and right diagonals
  104. else: fill z0--diag_end(0,4l,1,1,4r,3r)--diag_end(4r,3r,1,1,2l,1l)
  105.   --diag_end(2l,1l,1,1,1r,0)--cycle; fi % left and right diagonals
  106. penpos5(whatever,angle(z2-z1)); z5=whatever[z1,z2];
  107. penpos6(whatever,angle(z3-z4)); z6=whatever[z3,z4]; y6=y5;
  108. if hefty: y5r else: y5 fi =5/12y0;
  109. y5r-y5l=y6r-y6l=cap_band; penstroke z5e--z6e; % bar line
  110. if serifs: numeric inner_jut; pickup tiny.nib;
  111.  prime_points_inside(1,2); prime_points_inside(4,3);
  112.  if rt x1'r+cap_jut+.5u+1<=lft x4'l-cap_jut: inner_jut=cap_jut;
  113.  else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi
  114.  dish_serif(1',2,a,1/2,outer_jut,b,.6,inner_jut)(dark);  % left serif
  115.  dish_serif(4',3,c,1/2,inner_jut,d,1/3,outer_jut); fi  % right serif
  116. % the accent
  117. ogon_one   := 12;
  118. ogon_two   := 13;
  119. ogon_three := 14;
  120. if serifs:
  121.  x[ogon_one]r=x4r+outer_jut;
  122. else:
  123.  x[ogon_one]r=x4r;
  124. fi
  125.  pickup crisp.nib;
  126.  pos[ogon_one](
  127.  if currentbreadth<0.9vair: 0.9vair else: currentbreadth + eps fi ,-60);
  128.  pos[ogon_two](stem,0);
  129.  pos[ogon_three](vair,145);
  130.  x[ogon_two]=x[ogon_one]-2.5u;
  131.  x[ogon_three]=x[ogon_one]+0.5u;
  132.  bot y[ogon_one]r = 0;
  133.  bot y[ogon_three]=0.5(-d-o);  %0.4
  134.  bot y[ogon_two]=0.5(-d-o);
  135.  filldraw stroke z[ogon_one]e{dir 225}...
  136.    z[ogon_two]e{dir -110}...{dir 60}z[ogon_three]e;  % hook
  137. penlabels(0,1,2,3,4,5,6,7,8,9,10,11,grave_one,grave_two); endchar;
  138.  
  139.  
  140. dcchar "The letter acute  C";
  141. if serifs: beginchar(oct"202",13u#,cap_height#+acc_height#,0);
  142.  italcorr cap_height#*slant-.5u#;
  143.  adjust_fit(0,0);
  144.  pickup fine.nib; pos1(cap_hair,0); pos2(cap_band,90);
  145.  pos3(cap_curve,180); pos4(cap_band,270); pos5(hair,360);
  146.  rt x1r=rt x5r=hround(w-u); lft x3r=hround u; x2=x4=.55[x3,x1];
  147.  top y2r=cap_height+o; bot y4r=-o; y3=.5[y2,y4];
  148.  bot y1=min(vround max(.6cap_height,x_height-.5vair),bot y2l-eps);
  149.  y5=max(good.y .95(cap_height-y1),y4l+eps);
  150.  (x2l',y2l)=whatever[z2r,z1l]; x2l:=min(x2l',x2l+.5u);
  151.  (x4l',y4l)=whatever[z4r,z5l]; x4l:=min(x4l',x4l+.5u);
  152.  filldraw stroke z1e{x2-x1,10(y2-y1)}
  153.   ...pulled_arc.e(2,3) & pulled_arc.e(3,4)...{up}z5e; % arc
  154.  pos6(.3[fine.breadth,cap_hair],0); x6r=x1r; top y6=cap_height+o;
  155.  x1r-x1'=2cap_curve-fine; y1'=y1;
  156.  path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..z2{left};
  157.  numeric t; t=xpart(upper_arc intersectiontimes (z6l--z1'));
  158.  filldraw z1r--z6r--z6l--subpath(t,0) of upper_arc--cycle; % barb
  159. else: beginchar(oct"202",11.5u#,cap_height#+acc_height#,0);
  160.  italcorr cap_height#*slant-.5u#;
  161.  adjust_fit(0,0);
  162.  pickup fine.nib; pos1(1.2flare,80); pos2(slab,90);
  163.  pos3(cap_curve,180); pos4(slab,270); pos5(flare,275);
  164.  rt x1r=hround(w-1.1u); x2=x4=.5w+1.25u;
  165.  lft x3r=hround max(u,2u-.5cap_curve); rt x5r=hround(w-.9u);
  166.  top y1r=vround .95cap_height+o; top y2r=cap_height+o; y3=.5cap_height;
  167.  bot y4r=-o; bot y5r=vround .08cap_height-o; y5l:=good.y y5l; x5l:=good.x x5l;
  168.  filldraw stroke rterm.e(2,1,right,.9,4) & super_arc.e(2,3)
  169.   & super_arc.e(3,4) & term.e(4,5,right,.8,4); fi % arc and terminals
  170. % the accent
  171. uppercase_acute(0,0,7,8);
  172. penlabels(1,1',2,3,4,5,6,7,8,9,10,11); endchar;
  173.  
  174. dcchar "The letter hachek  C";
  175. if serifs: beginchar(oct"203",13u#,cap_height#+acc_height#,0);
  176.  italcorr cap_height#*slant-.5u#;
  177.  adjust_fit(0,0);
  178.  pickup fine.nib; pos1(cap_hair,0); pos2(cap_band,90);
  179.  pos3(cap_curve,180); pos4(cap_band,270); pos5(hair,360);
  180.  rt x1r=rt x5r=hround(w-u); lft x3r=hround u; x2=x4=.55[x3,x1];
  181.  top y2r=cap_height+o; bot y4r=-o; y3=.5[y2,y4];
  182.  bot y1=min(vround max(.6cap_height,x_height-.5vair),bot y2l-eps);
  183.  y5=max(good.y .95(cap_height-y1),y4l+eps);
  184.  (x2l',y2l)=whatever[z2r,z1l]; x2l:=min(x2l',x2l+.5u);
  185.  (x4l',y4l)=whatever[z4r,z5l]; x4l:=min(x4l',x4l+.5u);
  186.  filldraw stroke z1e{x2-x1,10(y2-y1)}
  187.   ...pulled_arc.e(2,3) & pulled_arc.e(3,4)...{up}z5e; % arc
  188.  pos6(.3[fine.breadth,cap_hair],0); x6r=x1r; top y6=cap_height+o;
  189.  x1r-x1'=2cap_curve-fine; y1'=y1;
  190.  path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..z2{left};
  191.  numeric t; t=xpart(upper_arc intersectiontimes (z6l--z1'));
  192.  filldraw z1r--z6r--z6l--subpath(t,0) of upper_arc--cycle; % barb
  193. else: beginchar(oct"203",11.5u#,cap_height#+acc_height#,0);
  194.  italcorr cap_height#*slant-.5u#;
  195.  adjust_fit(0,0);
  196.  pickup fine.nib; pos1(1.2flare,80); pos2(slab,90);
  197.  pos3(cap_curve,180); pos4(slab,270); pos5(flare,275);
  198.  rt x1r=hround(w-1.1u); x2=x4=.5w+1.25u;
  199.  lft x3r=hround max(u,2u-.5cap_curve); rt x5r=hround(w-.9u);
  200.  top y1r=vround .95cap_height+o; top y2r=cap_height+o; y3=.5cap_height;
  201.  bot y4r=-o; bot y5r=vround .08cap_height-o; y5l:=good.y y5l; x5l:=good.x x5l;
  202.  filldraw stroke rterm.e(2,1,right,.9,4) & super_arc.e(2,3)
  203.   & super_arc.e(3,4) & term.e(4,5,right,.8,4); fi % arc and terminals
  204. % the accent
  205. uppercase_hachek(x2,0,7,8,9,10,11);
  206. math_fit(0,ic#-.5u#);
  207. penlabels(1,1',2,3,4,5,6,7,8,9,10,11); endchar;
  208.  
  209.  
  210. dcchar "The letter hachek (check) D";
  211. beginchar(oct"204",13.5u#,cap_height#+acc_height#,0);
  212. italcorr .7cap_height#*slant-.5u#;
  213. adjust_fit(cap_serif_fit#,0);
  214. pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
  215. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem');
  216. top y1=cap_height; bot y2=0;
  217. filldraw stroke z1e--z2e; % stem
  218. penpos3(cap_band,90); penpos4(cap_band,90);
  219. penpos5(cap_curve-stem_corr,0);
  220. penpos6(cap_band,-90); penpos7(cap_band,-90);
  221. z3r=top z1; y4=y3; y5=.51[y4,y6]; y6=y7;
  222. z7r=bot z2; x4=x6=.5w+.25u; x5r=hround(w-u);
  223. x4l:=x6l:=x4-.25cap_curve;
  224. fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e;  % lobe
  225. if serifs: nodish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut);  % upper serif
  226.  nodish_serif(2,1,c,1/3,cap_jut,d,1/3,.5cap_jut); fi  % lower serif
  227. % the accent
  228. uppercase_hachek(.7[x7,x6],0,8,9,10,11,12);
  229. math_fit(0,ic#-.5u#);
  230. penlabels(1,2,3,4,5,6,7,8,9,10,11,12); endchar;
  231.  
  232.  
  233. dcchar "The letter hachek (check) E";
  234. beginchar(oct"205", 12u#-width_adj#,cap_height#+acc_height#,0);
  235. italcorr cap_height#*slant-beak_jut#-.5u#;
  236. adjust_fit(cap_serif_fit#,0);
  237. hh:=vround(cap_height-stem_corr);
  238. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  239. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem); top y1=hh; bot y2=0;
  240. filldraw stroke z1e--z2e; % stem
  241. pickup crisp.nib; pos3(slab,90); pos4(hair,0);
  242. top y3r=hh; x3=x1; rt x4r=hround(w-u); y4=good.y(y3l-beak)-eps;
  243. arm(3,4,e,beak_darkness,beak_jut);  % upper arm and beak
  244. pos5(cap_bar,-90); pos6(hair,0);
  245. top y5l=vround(.52[y2,y1]+.5cap_bar); x5=x1;
  246. pos0(cap_bar,90); pos7(hair,0);
  247. z0=z5; x6=x7; y6-y5l=y0l-y7;
  248. if serifs: rt x6r=hround(w-4.4u+.5hair); y6=good.y(y5l+.6beak)+eps;
  249.  rt x9r=hround(w-.5u);
  250. else: rt x6r=hround(w-1.5u); y6=y5l+eps; rt x9r=hround(w-.75u); fi
  251. arm(5,6,f,beak_darkness,0); arm(0,7,g,beak_darkness,0);  % middle arm and serif
  252. pos8(slab if not serifs:+2stem_corr fi,-90); pos9(hair,0);
  253. bot y8r=0; x8=x2; y9=good.y(y8l+7/6beak)+eps;
  254. arm(8,9,hh,beak_darkness,1.5beak_jut);  % lower arm and beak
  255. if serifs: nodish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut);  % upper serif
  256.  nodish_serif(2,1,c,1/3,cap_jut,d,1/3,.5cap_jut); fi  % lower serif
  257. math_fit(0,.5ic#);
  258. % the accent
  259. uppercase_hachek(if serifs: .5w else: .5[x1l,x4r] fi ,0,10,11,12,13,14);
  260. math_fit(0,ic#-.5u#);
  261. penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14); endchar;
  262.  
  263.  
  264.  
  265. dcchar "The letter ogonek E";
  266. beginchar(oct"206", 12u#-width_adj#,cap_height#,0.875desc_depth#);
  267. italcorr cap_height#*slant-beak_jut#-.5u#;
  268. adjust_fit(cap_serif_fit#,0);
  269. hh:=vround(cap_height-stem_corr);
  270. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  271. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem); top y1=hh; bot y2=0;
  272. filldraw stroke z1e--z2e; % stem
  273. pickup crisp.nib; pos3(slab,90); pos4(hair,0);
  274. top y3r=hh; x3=x1; rt x4r=hround(w-u); y4=good.y(y3l-beak)-eps;
  275. arm(3,4,e,beak_darkness,beak_jut);  % upper arm and beak
  276. pos5(cap_bar,-90); pos6(hair,0);
  277. top y5l=vround(.52[y2,y1]+.5cap_bar); x5=x1;
  278. pos0(cap_bar,90); pos7(hair,0);
  279. z0=z5; x6=x7; y6-y5l=y0l-y7;
  280. if serifs: rt x6r=hround(w-4.4u+.5hair); y6=good.y(y5l+.6beak)+eps;
  281.  rt x9r=hround(w-.5u);
  282. else: rt x6r=hround(w-1.5u); y6=y5l+eps; rt x9r=hround(w-.75u); fi
  283. arm(5,6,f,beak_darkness,0); arm(0,7,g,beak_darkness,0);  % middle arm and serif
  284. pos8(slab if not serifs:+2stem_corr fi,-90); pos9(hair,0);
  285. bot y8r=0; x8=x2; y9=good.y(y8l+7/6beak)+eps;
  286. arm(8,9,hh,beak_darkness,1.5beak_jut);  % lower arm and beak
  287. if serifs: nodish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut);  % upper serif
  288.  nodish_serif(2,1,c,1/3,cap_jut,d,1/3,.5cap_jut); fi  % lower serif
  289. math_fit(0,.5ic#);
  290. % the accent
  291. ogon_one   := 10;
  292. ogon_two   := 11;
  293. ogon_three := 12;
  294. if serifs:
  295.  x[ogon_one]r=x9r-1.5beak_jut;
  296. else:
  297.  x[ogon_one]r=x9r;
  298. fi
  299.  pickup crisp.nib;
  300.  pos[ogon_one](
  301.  if currentbreadth<0.9vair: 0.9vair else: currentbreadth + eps fi ,-60);
  302.  pos[ogon_two](stem,0);
  303.  pos[ogon_three](vair,145);
  304.  x[ogon_two]=x[ogon_one]-2.5u;
  305.  x[ogon_three]=x[ogon_one]+0.5u;
  306.  bot y[ogon_one]r = 0;
  307.  bot y[ogon_three]=0.5(-d-o);  %0.4
  308.  bot y[ogon_two]=0.5(-d-o);
  309.  filldraw stroke z[ogon_one]e{dir 225}...
  310.    z[ogon_two]e{dir -110}...{dir 60}z[ogon_three]e;  % hook
  311. penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14); endchar;
  312.  
  313. dcchar "The letter breve G";
  314. if serifs: beginchar(oct"207",14u#,cap_height#+acc_height#,0);
  315.  italcorr cap_height#*slant-1.5u#-.5cap_serif_fit#;
  316.  adjust_fit(0,.5cap_serif_fit#);
  317.  pickup tiny.nib; pos0(cap_stem,0); pos7(cap_stem,0);
  318.  rt x0r=hround(w-2u); y0=good.y(.1[bar_height,x_height]+1); x7=x0;
  319.  pickup fine.nib;
  320.  if hefty: bot y7=0; pos5(cap_stem,0); x5=x0; top y5=tiny.top y0;
  321.  else: pos5(cap_hair,0); pos8(cap_stem,0);
  322.   y7=.5bar_height; z5l=z8l; z8=z7; x9=x8r; bot y9=0;
  323.   filldraw z8l{down}..{4(x9-x8),y9-y8}z9--z8r--cycle; fi % spur
  324.  pos1(cap_hair,0); pos2(cap_band,90);
  325.  pos3(cap_curve,180); pos4(cap_band,270);
  326.  rt x1r=hround(w-2u); lft x3r=hround u; x2=x4=.55[x3,x1];
  327.  top y2r=cap_height+o; bot y4r=-o; y3=.5[y2,y4];
  328.  bot y1=min(vround max(.6h,x_height-.5vair),bot y2l-eps);
  329.  (x2l',y2l)=whatever[z2r,z1l]; x2l:=min(x2l',x2l+.5u);
  330.  (x4l',y4l)=whatever[z4r,z5l]; x4l:=min(x4l',x4l+.5u);
  331.  filldraw stroke z1e{x2-x1,10(y2-y1)}
  332.   ...pulled_arc.e(2,3) & pulled_arc.e(3,4)...z5e{up}; % arc
  333.  pos6(.3[fine.breadth,cap_hair],0); x6r=x1r; top y6=cap_height+o;
  334.  x1r-x1'=2cap_curve-fine; y1'=y1;
  335.  path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..z2{left};
  336.  numeric t; t=xpart(upper_arc intersectiontimes (z6l--z1'));
  337.  filldraw z1r--z6r--z6l--subpath(t,0) of upper_arc--cycle; % barb
  338.  pickup tiny.nib; filldraw stroke z0e--z7e;  % stem
  339.  dish_serif(0,7,a,1/3,max(cap_jut,2.25u),b,1/3,1.25u);  % serif
  340.  math_fit(-.3cap_height#*slant-.5u#,ic#);
  341. else: beginchar(oct"207",12u#,cap_height#+acc_height#,0);
  342.  italcorr cap_height#*slant-.5u#;
  343.  adjust_fit(0,0);
  344.  pickup fine.nib; pos1(1.2flare,80); pos2(slab,90);
  345.  pos3(cap_curve,180); pos4(slab,270); pos5(flare,270);
  346.  rt x1r=hround(w-1.35u); x2=x4=.5w+u;
  347.  lft x3r=hround max(u,2u-.5cap_curve); rt x5l=hround(w-1.2u);
  348.  top y1r=vround .93cap_height+o; top y2r=cap_height+o; y3=.5cap_height;
  349.  bot y4r=-o; bot y5r=vround .07cap_height-o;
  350.  filldraw stroke rterm.e(2,1,right,.9,4)&super_arc.e(2,3)
  351.   & super_arc.e(3,4) & term.e(4,5,right,1,4); % arc and terminals
  352.  pos0(stem,0); pos7(stem,0);
  353.  z7r=z5r; x0=x7; top y0=1+vround .35[bar_height,x_height];
  354.  filldraw stroke z0e--z7e;  % stem
  355.  pos8(cap_bar,90); pos9(cap_bar,90);
  356.  z0r=z9r; y8=y9; lft x8=hround x4;
  357.  filldraw stroke z8e--z9e;  % bar
  358.  math_fit(-.3cap_height#*slant-.5u#,.5ic#); fi
  359. % the accent
  360. uppercase_breve(x2,0,10,11,12);
  361. penlabels(0,1,1',2,3,4,5,6,7,8,9,10,11,12);endchar;
  362.  
  363.  
  364. dcchar "The letter acute L";
  365. beginchar(oct"210",11u#-width_adj#,cap_height#+acc_height#,0);
  366. adjust_fit(cap_serif_fit#,0);
  367. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  368. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem); top y1=cap_height; bot y2=0;
  369. filldraw stroke z1e--z2e; % stem
  370. pickup crisp.nib; pos3(slab,-90); pos4(hair,0);
  371. bot y3r=0; x3=x2; y4=y3l+7/6beak+eps; rt x4r=hround(w-.75u);
  372. arm(3,4,e,1.2beak_darkness,beak_jut);  % lower arm and beak
  373. if serifs: dish_serif(1,2,a,1/3,cap_jut,b,1/3,1.25cap_jut);  % upper serif
  374.  nodish_serif(2,1,c,1/3,cap_jut,d,1/3,.5cap_jut); fi  % lower serif
  375. % the accent
  376. uppercase_acute(0,0,5,6);
  377. math_fit(0,u#); penlabels(1,2,3,4,5,6); endchar;
  378.  
  379.  
  380. dcchar "The letter comma (apostrophe) L";
  381. beginchar(oct"211",11u#-width_adj#,cap_height#,0);
  382. adjust_fit(cap_serif_fit#,0);
  383. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  384. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem); top y1=cap_height; bot y2=0;
  385. filldraw stroke z1e--z2e; % stem
  386. pickup crisp.nib; pos3(slab,-90); pos4(hair,0);
  387. bot y3r=0; x3=x2; y4=y3l+7/6beak+eps; rt x4r=hround(w-.75u);
  388. arm(3,4,e,1.2beak_darkness,beak_jut);  % lower arm and beak
  389. if serifs: dish_serif(1,2,a,1/3,cap_jut,b,1/3,cap_jut);  % upper serif
  390.  nodish_serif(2,1,c,1/3,cap_jut,d,1/3,.5cap_jut); fi  % lower serif
  391. % the accent
  392. komma_one := 5;
  393. if serifs:
  394.  x[komma_one]=hround(x1r+1.25cap_jut+dot_size);
  395. else:
  396.  x[komma_one]=hround(x1r+dot_size);
  397. fi
  398. y[komma_one]+.5dot_size=h;
  399. if monospace:
  400.    comma([komma_one],ee,dot_size,.28u,vround 1.5comma_depth);  % large comma
  401. else:
  402.    comma([komma_one],ee,dot_size,.25u,0.8comma_depth); fi  % comma with increased jut
  403. math_fit(0,u#); penlabels(1,2,3,4,5); endchar;
  404.  
  405. dcchar "The letter polish L";
  406. beginchar(oct"212",11u#-width_adj#,cap_height#,0);
  407. adjust_fit(cap_serif_fit#,0);
  408. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  409. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem); top y1=cap_height; bot y2=0;
  410. filldraw stroke z1e--z2e; % stem
  411. pickup crisp.nib; pos3(slab,-90); pos4(hair,0);
  412. bot y3r=0; x3=x2; y4=y3l+7/6beak+eps; rt x4r=hround(w-.75u);
  413. arm(3,4,e,1.2beak_darkness,beak_jut);  % lower arm and beak
  414. if serifs: dish_serif(1,2,a,1/3,cap_jut,b,1/3,cap_jut);  % upper serif
  415.  nodish_serif(2,1,c,1/3,cap_jut,d,1/3,.5cap_jut); fi  % lower serif
  416. % the accent
  417. cross_one :=5;
  418. cross_two :=6;
  419. if unknown l_width:
  420.  l_width:=5u+2serif_fit; fi  % nominal width of `l'
  421. if unknown L_stem:
  422.  L_stem:=cap_serif_fit+max(2u+.5cap_stem,3u); fi  % center of `L' stem
  423. %
  424. pickup crisp.nib;
  425. x[cross_two]-x[cross_one]=max(4u,2.8u+stem);
  426. .5[x[cross_one],x[cross_two]]=x1;
  427. y[cross_one]-.5bar=.2[bar_height,x_height];
  428. y[cross_two]+.5bar=.8[bar_height,x_height];
  429. numeric theta; theta=angle(z[cross_two]-z[cross_one])+90;
  430. pos[cross_one](bar,theta); pos[cross_two](bar,theta);
  431. filldraw stroke z[cross_one]e--z[cross_two]e;  % diagonal
  432. math_fit(0,u#); penlabels(1,2,3,4,5); endchar;
  433.  
  434. dcchar "The letter acute N";
  435. beginchar(oct"213",13u#+width_adj#,cap_height#+acc_height#,0);
  436. italcorr cap_height#*slant-cap_serif_fit#+cap_jut#-2.5u#+min(.5cap_stem#,u#);
  437. adjust_fit(cap_serif_fit#,cap_serif_fit#);
  438. numeric thin_stem; thin_stem=hround(fudged.hair+stem_corr);
  439. pickup tiny.nib; pos1(thin_stem,0); pos2(thin_stem,0);
  440. pos3(thin_stem,0); pos4(thin_stem,0);
  441. pickup tiny.nib; top y1=top y3=cap_height; bot y2=bot y4=0;
  442. x1=x2; x3=x4; x1l=w-x3r;
  443. rt x3r=hround min(w-2u,w-3u+.5fudged.cap_stem);
  444. filldraw stroke z1e--z2e; % left stem
  445. filldraw stroke z3e--z4e; % right stem
  446. if hefty: penpos5(fudged.cap_stem,0); penpos6(fudged.cap_stem,0);
  447.  x5l=x1; x6r=x4; y5=cap_height; y6=0;
  448.  numeric upper_notch,lower_notch;
  449.  upper_notch=cap_height-cap_notch_cut; lower_notch=cap_notch_cut;
  450.  x1'=rt x1r; z1'=whatever[z5l,z6l]; x4'=lft x4l; z4'=whatever[z5r,z6r];
  451.  fill z5l..
  452.   if y1'<upper_notch: {right}(x1'+1,upper_notch){down}... fi
  453.   {z6-z5}diag_in(5l,6l,1,6r)--z6r..
  454.   if y4'>lower_notch: {left}(x4'-1,lower_notch){up}... fi
  455.   {z5-z6}diag_in(6r,5r,1,5l)--cycle;  % diagonal
  456. else: penpos5(whatever,0); penpos6(whatever,90);
  457.  z5l=z1l; z6l=z4l;
  458.  z7=z6l+(max(eps,cap_stem-3stem_corr-tiny),0) rotated (angle(z5l-z6l)-90);
  459.  z5r=z7+whatever*(z5l-z6l); z6r=z7+whatever*(z5l-z6l);
  460.  filldraw stroke z5e..z6e; fi  % diagonal
  461. if serifs: if hefty: serif(1,2,a,1/3,-cap_jut); % upper left serif
  462.  else: serif(5,6,a,1/3,-cap_jut); fi  % upper left serif
  463.  dish_serif(2,1,b,1/2,cap_jut,c,1/2,cap_jut)(dark); % lower left serif
  464.  dish_serif(3,4,e,1/2,cap_jut,f,1/2,cap_jut)(dark); fi  % upper right serif
  465. % the accent
  466. uppercase_acute(0,0,8,9);
  467. math_fit(0,max(.5ic#-.5u#,0)); penlabels(1,1',2,3,4,4',5,6,7,8,9,10,11,12,13);
  468. endchar;
  469.  
  470. dcchar "The letter hachek (check) N";
  471. beginchar(oct"214",13u#+width_adj#,cap_height#+acc_height#,0);
  472. italcorr cap_height#*slant-cap_serif_fit#+cap_jut#-2.5u#+min(.5cap_stem#,u#);
  473. adjust_fit(cap_serif_fit#,cap_serif_fit#);
  474. numeric thin_stem; thin_stem=hround(fudged.hair+stem_corr);
  475. pickup tiny.nib; pos1(thin_stem,0); pos2(thin_stem,0);
  476. pos3(thin_stem,0); pos4(thin_stem,0);
  477. pickup tiny.nib; top y1=top y3=cap_height; bot y2=bot y4=0;
  478. x1=x2; x3=x4; x1l=w-x3r;
  479. rt x3r=hround min(w-2u,w-3u+.5fudged.cap_stem);
  480. filldraw stroke z1e--z2e; % left stem
  481. filldraw stroke z3e--z4e; % right stem
  482. if hefty: penpos5(fudged.cap_stem,0); penpos6(fudged.cap_stem,0);
  483.  x5l=x1; x6r=x4; y5=cap_height; y6=0;
  484.  numeric upper_notch,lower_notch;
  485.  upper_notch=cap_height-cap_notch_cut; lower_notch=cap_notch_cut;
  486.  x1'=rt x1r; z1'=whatever[z5l,z6l]; x4'=lft x4l; z4'=whatever[z5r,z6r];
  487.  fill z5l..
  488.   if y1'<upper_notch: {right}(x1'+1,upper_notch){down}... fi
  489.   {z6-z5}diag_in(5l,6l,1,6r)--z6r..
  490.   if y4'>lower_notch: {left}(x4'-1,lower_notch){up}... fi
  491.   {z5-z6}diag_in(6r,5r,1,5l)--cycle;  % diagonal
  492. else: penpos5(whatever,0); penpos6(whatever,90);
  493.  z5l=z1l; z6l=z4l;
  494.  z7=z6l+(max(eps,cap_stem-3stem_corr-tiny),0) rotated (angle(z5l-z6l)-90);
  495.  z5r=z7+whatever*(z5l-z6l); z6r=z7+whatever*(z5l-z6l);
  496.  filldraw stroke z5e..z6e; fi  % diagonal
  497. if serifs: if hefty: serif(1,2,a,1/3,-cap_jut); % upper left serif
  498.  else: serif(5,6,a,1/3,-cap_jut); fi  % upper left serif
  499.  dish_serif(2,1,b,1/2,cap_jut,c,1/2,cap_jut)(dark); % lower left serif
  500.  dish_serif(3,4,e,1/2,cap_jut,f,1/2,cap_jut)(dark); fi  % upper right serif
  501. % the accent
  502. uppercase_hachek(.5w,0,8,9,10,11,12);
  503. math_fit(0,max(.5ic#-.5u#,0)); penlabels(1,1',2,3,4,4',5,6,7,8,9,10,11,12,13);
  504. endchar;
  505.  
  506.  
  507. dcchar "The letter Eng";
  508. beginchar(oct"215",13u#,cap_height#,0);
  509. italcorr cap_height#*slant;
  510. adjust_fit(serif_fit#+stem_shift#,0);
  511. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  512. numeric shaved_stem; shaved_stem=hround(cap_stem-2stem_corr);
  513. pos1'(shaved_stem,0); pos2'(shaved_stem,0); pos3(cap_stem,0);
  514. lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l; x3r=w-u;
  515. top y1=h+min(oo,serif_drop); bot y2=0; y1=y1'; y2=y2';
  516. filldraw stroke z1'e--z2'e;  % left stem
  517. eng_stroke(2,a,3,4,cap_height-x_height);  % arch and right stem
  518. if serifs: sloped_serif.l(1',2',b,1/3,jut,serif_drop); % upper left serif
  519.  numeric inner_jut; pickup tiny.nib;
  520.  if rt x2r+jut+.5u+1<=lft x4l-jut: inner_jut=jut;
  521.  else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi
  522.  dish_serif(2,1,c,1/3,jut,d,1/3,jut); % lower left serif
  523. %  dish_serif(4,3,e,1/3,inner_jut,f,1/3,jut); fi % lower right serif
  524. pickup tiny.nib;
  525. % pos1(cap_stem',0); pos2(cap_stem',0);
  526. % top y1=h; rt x1r=hround(w-2u); x2=x1; y2=.21h;
  527. % if serifs:
  528.  pos5(vair,-90); pos6(cap_hair,-180);
  529.  pos7(flare+(cap_stem-stem),-180);
  530.  bot y5r=-o; x5=.5[x6,x4]; y7=1/6h;
  531.  x7=.55[x2,x4]; % rt x7l=hround x4l-2.75u;
  532.  z7r=z6r;
  533.  filldraw stroke z3e--z4e&super_arc.e(4,5);  % stem and arc
  534. % dish_serif(1,2,a,1/3,1.3cap_jut,b,1/3,.75cap_jut);  % serif
  535.  bulb(5,6,7);  % bulb
  536. else: filldraw stroke z3e--z4e;  % stem
  537.  pickup fine.nib; pos5(cap_stem',0); z5=z4;
  538.  pos6(flare,angle(6.5u,-h)); pos7(1.1flare,-100);
  539.  bot y6r=-o; x6r=.5[x7r,x5r]; lft x7r=hround x4l-2.75u; bot y7r=vround.06h-o;
  540.  filldraw stroke z5e{down}....term.e(6,7,left,3,6); fi % arc and terminal
  541. penlabels(1,2,3,4,5,6,7); endchar;
  542.  
  543. dcchar "The letter long Hungarian umlaut O";
  544. beginchar(oct"216",14u#-width_adj#,cap_height#+acc_height#,0);
  545. italcorr .7cap_height#*slant-.5u#;
  546. adjust_fit(0,0);
  547. penpos1(vair',90); penpos3(vround(vair+1.5vair_corr),-90);
  548. penpos2(cap_curve,180); penpos4(cap_curve,0);
  549. if monospace: x2r=hround 1.5u;
  550.  interim superness:=sqrt superness;  % make |"O"|, not |"0"|
  551. else: x2r=hround u; fi
  552. x4r=w-x2r; x1=x3=.5w; y1r=cap_height+o; y3r=-o;
  553. y2=y4=.5cap_height-vair_corr; y2l:=y4l:=.52cap_height;
  554. penstroke pulled_super_arc.e(1,2)(.5superpull)
  555.  & pulled_super_arc.e(2,3)(.5superpull)
  556.  & pulled_super_arc.e(3,4)(.5superpull)
  557.  & pulled_super_arc.e(4,1)(.5superpull) & cycle;  % bowl
  558. math_fit(-.3cap_height#*slant-.5u#,ic#-.5u#);
  559. uppercase_humlaut(x1,0,5,6,7,8);
  560. penlabels(1,2,3,4,5,6,7,8); endchar;
  561.  
  562.  
  563. dcchar "The letter acute R";
  564. beginchar(oct"217",if serifs: 12u#+.5max(2u#,cap_curve#)
  565.  else:12.5u#-.5width_adj# fi,cap_height#+acc_height#,0);
  566. italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
  567. adjust_fit(cap_serif_fit#,0);
  568. pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
  569. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=cap_height; bot y2=0;
  570. filldraw stroke z1e--z2e; % stem
  571. penpos3(cap_band,90); penpos4(cap_band,90);
  572. penpos5(cap_curve if hefty:-3stem_corr fi,0);
  573. penpos6(vair,-90); penpos7(vair,-90);
  574. z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
  575. x7=x2; y7l=vround(.5cap_height+.5vair); x4=x6;
  576. if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
  577. else: x4=.5w+.5u; x5r=hround(w-u); fi
  578. x4l:=x6l:=x4-.125cap_curve;
  579. fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e;  % lobe
  580. if serifs: pos6'(vair,-90); pos0(cap_stem,180);
  581.  pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
  582.  z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
  583.  y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
  584.  bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
  585.  filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up};  % tail
  586.  nodish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut);  % upper serif
  587.  dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut);  % lower serif
  588. else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
  589.  x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
  590.  fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi  % tail
  591. % the accent
  592. uppercase_acute(0,0,11,12);
  593. math_fit(0,.75ic#); penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); endchar;
  594.  
  595. dcchar "The letter hachek (check) R";
  596. beginchar(oct"220",if serifs: 12u#+.5max(2u#,cap_curve#)
  597.  else:12.5u#-.5width_adj# fi,cap_height#+acc_height#,0);
  598. italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#;
  599. adjust_fit(cap_serif_fit#,0);
  600. pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0);
  601. lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=cap_height; bot y2=0;
  602. filldraw stroke z1e--z2e; % stem
  603. penpos3(cap_band,90); penpos4(cap_band,90);
  604. penpos5(cap_curve if hefty:-3stem_corr fi,0);
  605. penpos6(vair,-90); penpos7(vair,-90);
  606. z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7;
  607. x7=x2; y7l=vround(.5cap_height+.5vair); x4=x6;
  608. if serifs: x4=.5w-.5u; x5r=hround(w-2.25u);
  609. else: x4=.5w+.5u; x5r=hround(w-u); fi
  610. x4l:=x6l:=x4-.125cap_curve;
  611. fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e;  % lobe
  612. if serifs: pos6'(vair,-90); pos0(cap_stem,180);
  613.  pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0);
  614.  z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve);
  615.  y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r];
  616.  bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7];
  617.  filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up};  % tail
  618.  nodish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut);  % upper serif
  619.  dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut);  % lower serif
  620. else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0);
  621.  x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0;
  622.  fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi  % tail
  623. % the accent
  624. uppercase_hachek(.5[.5w,x4],0,11,12,13,14,15);
  625. math_fit(0,ic#-.5u#);
  626. penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
  627.  
  628.  
  629. dcchar "The letter acute S";
  630. beginchar(oct"221",10u#,cap_height#+acc_height#,0);
  631. italcorr cap_height#*slant-u#;
  632. adjust_fit(0,0);
  633. numeric theta; theta=90-angle(50u,cap_height);
  634. slope:=-cap_height/50u;  % angle at middle
  635. numeric s_slab; s_slab=if serifs:slab else:vround .2[slab,cap_stem] fi;
  636. numeric ess'; ess'=max(fine.breadth,cap_ess);
  637. pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90);
  638. pos0(ess',theta); pos7(s_slab,-90);
  639. x2+x7=2x0=w; x7-x2=if serifs: u else: 0 fi;
  640. top y2l=cap_height+o; bot y7r=-o;
  641. y0=.52cap_height; lft x3l=hround u; rt x6r=hround(w-u);
  642. x3r-x3l=x6r-x6l=hround .5[s_slab,ess']-fine;
  643. ellipse_set(2l,3l,4l,0l); ellipse_set(2r,3r,4r,0r); y3=y3r;
  644. ellipse_set(7l,6l,5l,0l); ellipse_set(7r,6r,5r,0r); y6=y6r;
  645. filldraw stroke super_arc.e(2,3) & z3e{down}
  646.  ..z4e---z5e..z6e{down} & super_arc.e(6,7);  % main stroke
  647. if serifs: pos1(hair,180); pos8(hair,180);
  648.  rt x1l=hround(w-1.5u); lft x8r=hround u;
  649.  bot y1=vround 2/3cap_height+1; top y8=vround 1/3cap_height-1;
  650.  filldraw stroke z1e{x2-x1,10(y2-y1)}....{left}z2e;  % upper arc
  651.  filldraw stroke z7e{left}....{up}z8e;  % lower arc
  652.  path upper_arc, lower_arc;
  653.  upper_arc=z1{x2-x1,10(y2-y1)}....{left}z2;
  654.  lower_arc=z7{left}....{up}z8;
  655.  pos10(.3[fine.breadth,cap_hair],0); pos9(.3[fine.breadth,cap_hair],0);
  656.  x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r;
  657.  x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8;
  658.  numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1'));
  659.  filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle;  % upper barb
  660.  t:=xpart(lower_arc intersectiontimes(z9r--z8'));
  661.  filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle;  % lower barb
  662. else: pos1(1.2flare,-100); pos8(1.2flare,-100);
  663.  x1l=good.x(x1l+w-1.75u-rt x1); lft x8r=hround .8u;
  664.  top y1l=vround .93cap_height+o; bot y8r=vround .1cap_height-o;
  665.  filldraw stroke term.e(2,1,right,.9,4);  % upper arc and terminal
  666.  filldraw stroke term.e(7,8,left,1,4); fi  % lower arc and terminal
  667. % the accent
  668. uppercase_acute(0,0,11,12);
  669. math_fit(0,.5ic#); penlabels(0,1,1',2,3,4,5,6,7,8,8',9,10); endchar;
  670.  
  671.  
  672. dcchar "The letter hachek (check) S";
  673. beginchar(oct"222",10u#,cap_height#+acc_height#,0);
  674. italcorr cap_height#*slant-u#;
  675. adjust_fit(0,0);
  676. numeric theta; theta=90-angle(50u,cap_height);
  677. slope:=-cap_height/50u;  % angle at middle
  678. numeric s_slab; s_slab=if serifs:slab else:vround .2[slab,cap_stem] fi;
  679. numeric ess'; ess'=max(fine.breadth,cap_ess);
  680. pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90);
  681. pos0(ess',theta); pos7(s_slab,-90);
  682. x2+x7=2x0=w; x7-x2=if serifs: u else: 0 fi;
  683. top y2l=cap_height+o; bot y7r=-o;
  684. y0=.52cap_height; lft x3l=hround u; rt x6r=hround(w-u);
  685. x3r-x3l=x6r-x6l=hround .5[s_slab,ess']-fine;
  686. ellipse_set(2l,3l,4l,0l); ellipse_set(2r,3r,4r,0r); y3=y3r;
  687. ellipse_set(7l,6l,5l,0l); ellipse_set(7r,6r,5r,0r); y6=y6r;
  688. filldraw stroke super_arc.e(2,3) & z3e{down}
  689.  ..z4e---z5e..z6e{down} & super_arc.e(6,7);  % main stroke
  690. if serifs: pos1(hair,180); pos8(hair,180);
  691.  rt x1l=hround(w-1.5u); lft x8r=hround u;
  692.  bot y1=vround 2/3cap_height+1; top y8=vround 1/3cap_height-1;
  693.  filldraw stroke z1e{x2-x1,10(y2-y1)}....{left}z2e;  % upper arc
  694.  filldraw stroke z7e{left}....{up}z8e;  % lower arc
  695.  path upper_arc, lower_arc;
  696.  upper_arc=z1{x2-x1,10(y2-y1)}....{left}z2;
  697.  lower_arc=z7{left}....{up}z8;
  698.  pos10(.3[fine.breadth,cap_hair],0); pos9(.3[fine.breadth,cap_hair],0);
  699.  x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r;
  700.  x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8;
  701.  numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1'));
  702.  filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle;  % upper barb
  703.  t:=xpart(lower_arc intersectiontimes(z9r--z8'));
  704.  filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle;  % lower barb
  705. else: pos1(1.2flare,-100); pos8(1.2flare,-100);
  706.  x1l=good.x(x1l+w-1.75u-rt x1); lft x8r=hround .8u;
  707.  top y1l=vround .93cap_height+o; bot y8r=vround .1cap_height-o;
  708.  filldraw stroke term.e(2,1,right,.9,4);  % upper arc and terminal
  709.  filldraw stroke term.e(7,8,left,1,4); fi  % lower arc and terminal
  710. % the accent
  711. uppercase_hachek(.5w,0,11,12,13,14,15);
  712. math_fit(0,ic#-.5u#);
  713. penlabels(0,1,1',2,3,4,5,6,7,8,8',9,10,11,12,13,14,15); endchar;
  714.  
  715. dcchar "The letter cedilla S";
  716. beginchar(oct"223",10u#,cap_height#+acc_height#,0.875desc_depth#);
  717. italcorr cap_height#*slant-u#;
  718. adjust_fit(0,0);
  719. numeric theta; theta=90-angle(50u,cap_height);
  720. slope:=-cap_height/50u;  % angle at middle
  721. numeric s_slab; s_slab=if serifs:slab else:vround .2[slab,cap_stem] fi;
  722. numeric ess'; ess'=max(fine.breadth,cap_ess);
  723. pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90);
  724. pos0(ess',theta); pos7(s_slab,-90);
  725. x2+x7=2x0=w; x7-x2=if serifs: u else: 0 fi;
  726. top y2l=cap_height+o; bot y7r=-o;
  727. y0=.52cap_height; lft x3l=hround u; rt x6r=hround(w-u);
  728. x3r-x3l=x6r-x6l=hround .5[s_slab,ess']-fine;
  729. ellipse_set(2l,3l,4l,0l); ellipse_set(2r,3r,4r,0r); y3=y3r;
  730. ellipse_set(7l,6l,5l,0l); ellipse_set(7r,6r,5r,0r); y6=y6r;
  731. filldraw stroke super_arc.e(2,3) & z3e{down}
  732.  ..z4e---z5e..z6e{down} & super_arc.e(6,7);  % main stroke
  733. if serifs: pos1(hair,180); pos8(hair,180);
  734.  rt x1l=hround(w-1.5u); lft x8r=hround u;
  735.  bot y1=vround 2/3cap_height+1; top y8=vround 1/3cap_height-1;
  736.  filldraw stroke z1e{x2-x1,10(y2-y1)}....{left}z2e;  % upper arc
  737.  filldraw stroke z7e{left}....{up}z8e;  % lower arc
  738.  path upper_arc, lower_arc;
  739.  upper_arc=z1{x2-x1,10(y2-y1)}....{left}z2;
  740.  lower_arc=z7{left}....{up}z8;
  741.  pos10(.3[fine.breadth,cap_hair],0); pos9(.3[fine.breadth,cap_hair],0);
  742.  x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r;
  743.  x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8;
  744.  numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1'));
  745.  filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle;  % upper barb
  746.  t:=xpart(lower_arc intersectiontimes(z9r--z8'));
  747.  filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle;  % lower barb
  748. else: pos1(1.2flare,-100); pos8(1.2flare,-100);
  749.  x1l=good.x(x1l+w-1.75u-rt x1); lft x8r=hround .8u;
  750.  top y1l=vround .93cap_height+o; bot y8r=vround .1cap_height-o;
  751.  filldraw stroke term.e(2,1,right,.9,4);  % upper arc and terminal
  752.  filldraw stroke term.e(7,8,left,1,4); fi  % lower arc and terminal
  753. % the accent
  754. uppercase_cedilla(x7,0,11,12,13,14,15);
  755. math_fit(0,.5ic#);
  756. penlabels(0,1,1',2,3,4,5,6,7,8,8',9,10,11,12,13,14,15); endchar;
  757.  
  758.  
  759. dcchar "The letter hachek (check) T";
  760. beginchar(oct"224",13u#-width_adj#,cap_height#+acc_height#,0);
  761. italcorr cap_height#*slant-beak_jut#-.25u#;
  762. adjust_fit(0,0);
  763. h':=h;
  764. h:=vround(cap_height-2stem_corr);
  765. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  766. lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=h; bot y2=0;
  767. filldraw stroke z1e--z2e; % stem
  768. pickup crisp.nib; pos3(slab,90); pos4(hair,0);
  769. top y3r=h; x3=x1; rt x4r=hround(w-.65u); y4=good.y(y3l-beak)-eps;
  770. arm(3,4,e,beak_darkness,.7beak_jut);  % right arm and beak
  771. pos5(hair,180); x5=w-x4; y5=y4;
  772. arm(3,5,f,beak_darkness,-.7beak_jut);  % left arm and beak
  773. if serifs: dish_serif(2,1,c,1/3,1.414cap_jut,d,1/3,1.414cap_jut);  % lower serif
  774.  nodish_serif(1,2,a,1/3,.5cap_jut,b,1/3,.5cap_jut); fi  % upper bracketing
  775. % the accent
  776. h:=h';
  777. uppercase_hachek(.5w,0,7,8,9,10,11);
  778. h:=h';
  779. math_fit(0,ic#-.5u#);
  780. penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
  781.  
  782. dcchar "The letter cedilla T";
  783. beginchar(oct"225",13u#-width_adj#,cap_height#+acc_height#,0.875desc_depth#);
  784. italcorr cap_height#*slant-beak_jut#-.25u#;
  785. adjust_fit(0,0);
  786. h:=vround(cap_height-2stem_corr);
  787. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  788. lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=h; bot y2=0;
  789. filldraw stroke z1e--z2e; % stem
  790. pickup crisp.nib; pos3(slab,90); pos4(hair,0);
  791. top y3r=h; x3=x1; rt x4r=hround(w-.65u); y4=good.y(y3l-beak)-eps;
  792. arm(3,4,e,beak_darkness,.7beak_jut);  % right arm and beak
  793. pos5(hair,180); x5=w-x4; y5=y4;
  794. arm(3,5,f,beak_darkness,-.7beak_jut);  % left arm and beak
  795. if serifs: dish_serif(2,1,c,1/3,1.414cap_jut,d,1/3,1.414cap_jut);  % lower serif
  796.  nodish_serif(1,2,a,1/3,.5cap_jut,b,1/3,.5cap_jut); fi  % upper bracketing
  797. % the accent
  798. uppercase_cedilla(x2,hair,7,8,9,10,11);
  799. math_fit(-.75cap_height#*slant,ic#-2.5u#);
  800. penlabels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  801.  
  802.  
  803. dcchar "The letter long Hungarian umlaut U";
  804. beginchar(oct"226",13u#+.5width_adj#,cap_height#+acc_height#,0);
  805. italcorr cap_height#*slant-cap_serif_fit#+cap_jut#-2.5u#+min(.5cap_stem#,u#);
  806. if monospace: adjust_fit(cap_serif_fit#-.5u#,cap_serif_fit#-.5u#)
  807. else: adjust_fit(cap_serif_fit#,cap_serif_fit#) fi;
  808. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  809. pos2'(cap_stem,180); z2'=z2;
  810. pos3(cap_band,-90);
  811. pos4(cap_hair,0); pos5(cap_hair,0);
  812. x1=x2; x3=.5[x1,x5]; x4=x5; x1l=w-x5r;
  813. top y1=top y5=cap_height; y2=y4=1/3cap_height; bot y3r=-o;
  814. lft x1l=hround max(2u,3u-.5cap_stem);
  815. filldraw stroke z1e--z2e; % left stem
  816. filldraw stroke pulled_arc.e(2',3)
  817.  & pulled_arc.e(3,4)&z4e--z5e; % arc and right stem
  818. if serifs: dish_serif(1,2,a,1/3,cap_jut,b,1/3,cap_jut); % left serif
  819.  dish_serif(5,4,c,1/2,cap_jut,d,1/2,cap_jut)(dark); fi  % right serif
  820. uppercase_humlaut(
  821.  if serifs: .5[x.b1,x.c1] else: x3 fi,0,7,8,9,10);
  822. math_fit(-cap_serif_fit#-.3cap_height#*slant-min(cap_height#*slant,u#),
  823.  max(.5ic#-.5u#,0));
  824. penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
  825.  
  826.  
  827. dcchar "The letter circle U";
  828. beginchar(oct"227",13u#+.5width_adj#,cap_height#+acc_height#,0);
  829. italcorr cap_height#*slant-cap_serif_fit#+cap_jut#-2.5u#+min(.5cap_stem#,u#);
  830. if monospace: adjust_fit(cap_serif_fit#-.5u#,cap_serif_fit#-.5u#)
  831. else: adjust_fit(cap_serif_fit#,cap_serif_fit#) fi;
  832. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  833. pos2'(cap_stem,180); z2'=z2;
  834. pos3(cap_band,-90);
  835. pos4(cap_hair,0); pos5(cap_hair,0);
  836. x1=x2; x3=.5[x1,x5]; x4=x5; x1l=w-x5r;
  837. top y1=top y5=cap_height; y2=y4=1/3cap_height; bot y3r=-o;
  838. lft x1l=hround max(2u,3u-.5cap_stem);
  839. filldraw stroke z1e--z2e; % left stem
  840. filldraw stroke pulled_arc.e(2',3)
  841.  & pulled_arc.e(3,4)&z4e--z5e; % arc and right stem
  842. if serifs: dish_serif(1,2,a,1/3,cap_jut,b,1/3,cap_jut); % left serif
  843.  dish_serif(5,4,c,1/2,cap_jut,d,1/2,cap_jut)(dark); fi  % right serif
  844. math_fit(-cap_serif_fit#-.3cap_height#*slant-min(cap_height#*slant,u#),
  845.  max(.5ic#-.5u#,0));
  846. % the accent
  847. uppercase_circle(
  848. if serifs: .5[x.b1,x.c1] else: x3 fi,
  849.    if 2x_height>cap_height: (1/3[acc_height+x_height,h]+apex_o)
  850.    else:                    cap_height+apex_o fi ,8,9,10,11);
  851. penlabels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  852.  
  853.  
  854. dcchar "The letter umlaut Y";
  855. beginchar(oct"230",13u#,cap_height#+acc_height#,0);
  856. italcorr cap_height#*slant+.45u#;
  857. adjust_fit(cap_serif_fit#,cap_serif_fit#);
  858. numeric left_stem,right_stem,outer_jut,dy,alpha;
  859. left_stem=cap_stem-stem_corr;
  860. right_stem=min(cap_hair if hefty:-2stem_corr fi,left_stem);
  861. outer_jut=.75cap_jut; x1l=w-x4r=l+letter_fit+outer_jut+.05u;
  862. x2l=x5l=hround(.5w-.5left_stem); x3r=x5r;
  863. y1=y4=cap_height; y2=y3=y5=.4cap_height;
  864. dy=y1-y2; alpha=((x2l-x1l)++dy)/dy;
  865. penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0);
  866. penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0);
  867. penpos5(left_stem,0); penpos6(left_stem,0); x5=x6; y6=0;
  868. z0=whatever[z1r,z2r]=whatever[z3l,z4l];
  869. if y0>y2+cap_notch_cut: y0:=y2+cap_notch_cut;
  870.   fill z0+.5right{up}...{z4-z3}diag_end(3l,4l,1,1,4r,3r)--z5r
  871.     --diag_end(5r,6r,1,1,6l,5l)--z5l--diag_end(2l,1l,1,1,1r,2r){z2-z1}
  872.     ...{down}z0+.5left--cycle; % diagonals and stem
  873. else: fill z0--diag_end(0,4l,1,1,4r,3r)--z5r
  874.     --diag_end(5r,6r,1,1,6l,5l)--z5l
  875.     --diag_end(2l,1l,1,1,1r,0)--cycle; fi  % diagonals and stem
  876. if serifs: numeric inner_jut; pickup tiny.nib;
  877.  prime_points_inside(1,2); prime_points_inside(4,3); prime_points_inside(6,5);
  878.  if rt x1'r+cap_jut+.5u+1<=lft x4'l-cap_jut: inner_jut=cap_jut;
  879.  else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi
  880.  dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut);  % upper left serif
  881.  dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark);  % upper right serif
  882.  dish_serif(6',5,e,1/3,cap_jut,f,1/3,cap_jut); fi  % lower serif
  883. % the accent
  884. uppercase_umlaut(0,0,7,8,9,10);
  885. math_fit(.5u#-cap_height#*slant,ic#-4u#);
  886. penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar;
  887.  
  888. dcchar "The letter acute Z";
  889. beginchar(oct"231",11u#,cap_height#+acc_height#,0);
  890. italcorr cap_height#*slant-.5u#;
  891. adjust_fit(0,0);
  892. numeric arm_thickness[],z_stem;
  893. if hefty: arm_thickness1=Vround(slab-vair_corr); arm_thickness2=slab;
  894.  z_stem=.8[vair,cap_stem];
  895. else: arm_thickness1=slab; arm_thickness2=vround(slab+vair_corr);
  896.  z_stem=.9[vair,cap_stem]; fi
  897. pickup tiny.nib; x3l=x4l=w-x1r=w-x2r; lft x3l=hround u;
  898. top y1=cap_height; y2=min(y1,cap_height-2/3arm_thickness1);
  899. bot y4=0; y3=max(y4,2/3arm_thickness2);
  900. numeric alpha; alpha=diag_ratio(1,z_stem-tiny,y2-y3,x2r-x3l);
  901. penpos1(alpha*(z_stem-tiny),0); penpos2(alpha*(z_stem-tiny),0);
  902. penpos3(alpha*(z_stem-tiny),0); penpos4(alpha*(z_stem-tiny),0);
  903. pair delta; delta=penoffset z3-z2 of currentpen;
  904. fill top lft z1l--z2l+delta---z3l+delta..lft z3l---lft z4l..bot z4l
  905.  ---bot rt z4r--z3r-delta---z2r-delta..rt z2r---rt z1r..top z1r
  906.  ---cycle;  % diagonal
  907. pickup crisp.nib; pos5(arm_thickness1,90); pos6(hair,180);
  908. top y5r=cap_height; x5=x1; lft x6r=hround 1.25u; y6=good.y(y5l-beak)-eps;
  909. arm(5,6,a,beak_darkness**.8,-.4beak_jut);  % upper arm and beak
  910. pos7(arm_thickness2,-90); pos8(hair,0);
  911. bot y7r=0; x7=x4; rt x8r=hround(w-.9u); y8=good.y(y7l+1.2beak)+eps;
  912. arm(7,8,b,beak_darkness**.9,.6beak_jut);  % lower arm and beak
  913. % the accent
  914. uppercase_acute(0,0,9,10);
  915. math_fit(0,.5ic#); penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
  916.  
  917. dcchar "The letter hachek (check) Z";
  918. beginchar(oct"232",11u#,cap_height#+acc_height#,0);
  919. italcorr cap_height#*slant-.5u#;
  920. adjust_fit(0,0);
  921. numeric arm_thickness[],z_stem;
  922. if hefty: arm_thickness1=Vround(slab-vair_corr); arm_thickness2=slab;
  923.  z_stem=.8[vair,cap_stem];
  924. else: arm_thickness1=slab; arm_thickness2=vround(slab+vair_corr);
  925.  z_stem=.9[vair,cap_stem]; fi
  926. pickup tiny.nib; x3l=x4l=w-x1r=w-x2r; lft x3l=hround u;
  927. top y1=cap_height; y2=min(y1,cap_height-2/3arm_thickness1);
  928. bot y4=0; y3=max(y4,2/3arm_thickness2);
  929. numeric alpha; alpha=diag_ratio(1,z_stem-tiny,y2-y3,x2r-x3l);
  930. penpos1(alpha*(z_stem-tiny),0); penpos2(alpha*(z_stem-tiny),0);
  931. penpos3(alpha*(z_stem-tiny),0); penpos4(alpha*(z_stem-tiny),0);
  932. pair delta; delta=penoffset z3-z2 of currentpen;
  933. fill top lft z1l--z2l+delta---z3l+delta..lft z3l---lft z4l..bot z4l
  934.  ---bot rt z4r--z3r-delta---z2r-delta..rt z2r---rt z1r..top z1r
  935.  ---cycle;  % diagonal
  936. pickup crisp.nib; pos5(arm_thickness1,90); pos6(hair,180);
  937. top y5r=cap_height; x5=x1; lft x6r=hround 1.25u; y6=good.y(y5l-beak)-eps;
  938. arm(5,6,a,beak_darkness**.8,-.4beak_jut);  % upper arm and beak
  939. pos7(arm_thickness2,-90); pos8(hair,0);
  940. bot y7r=0; x7=x4; rt x8r=hround(w-.9u); y8=good.y(y7l+1.2beak)+eps;
  941. arm(7,8,b,beak_darkness**.9,.6beak_jut);  % lower arm and beak
  942. % the accent
  943. uppercase_hachek(.5w,0,9,10,11,12,13);
  944. math_fit(0,ic#-.5u#);
  945. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); endchar;
  946.  
  947.  
  948. dcchar "The letter dot Z";
  949. beginchar(oct"233",11u#,cap_height#+acc_height#,0);
  950. italcorr cap_height#*slant-.5u#;
  951. adjust_fit(0,0);
  952. numeric arm_thickness[],z_stem;
  953. if hefty: arm_thickness1=Vround(slab-vair_corr); arm_thickness2=slab;
  954.  z_stem=.8[vair,cap_stem];
  955. else: arm_thickness1=slab; arm_thickness2=vround(slab+vair_corr);
  956.  z_stem=.9[vair,cap_stem]; fi
  957. pickup tiny.nib; x3l=x4l=w-x1r=w-x2r; lft x3l=hround u;
  958. top y1=cap_height; y2=min(y1,cap_height-2/3arm_thickness1);
  959. bot y4=0; y3=max(y4,2/3arm_thickness2);
  960. numeric alpha; alpha=diag_ratio(1,z_stem-tiny,y2-y3,x2r-x3l);
  961. penpos1(alpha*(z_stem-tiny),0); penpos2(alpha*(z_stem-tiny),0);
  962. penpos3(alpha*(z_stem-tiny),0); penpos4(alpha*(z_stem-tiny),0);
  963. pair delta; delta=penoffset z3-z2 of currentpen;
  964. fill top lft z1l--z2l+delta---z3l+delta..lft z3l---lft z4l..bot z4l
  965.  ---bot rt z4r--z3r-delta---z2r-delta..rt z2r---rt z1r..top z1r
  966.  ---cycle;  % diagonal
  967. pickup crisp.nib; pos5(arm_thickness1,90); pos6(hair,180);
  968. top y5r=cap_height; x5=x1; lft x6r=hround 1.25u; y6=good.y(y5l-beak)-eps;
  969. arm(5,6,a,beak_darkness**.8,-.4beak_jut);  % upper arm and beak
  970. pos7(arm_thickness2,-90); pos8(hair,0);
  971. bot y7r=0; x7=x4; rt x8r=hround(w-.9u); y8=good.y(y7l+1.2beak)+eps;
  972. arm(7,8,b,beak_darkness**.9,.6beak_jut);  % lower arm and beak
  973. % the accent
  974. dot_one   := 9;
  975. dot_two   := 10;
  976. numeric dot_diam#; dot_diam#=max(dot_size#,cap_curve#);
  977. define_whole_blacker_pixels(dot_diam);
  978. pickup tiny.nib;
  979. pos[dot_one](dot_diam,0);
  980. pos[dot_two](dot_diam,90);
  981. x[dot_one]=x[dot_two]=.5w;
  982. top y[dot_two]r=h;
  983. % = min(asc_height,10/7x_height+.5dot_diam)+acc_height;
  984. if bot y[dot_two]l<x_height+o+slab:
  985.    y[dot_two]l:=min(y[dot_two]r-eps,acc_height+x_height+o+slab+.5tiny); fi
  986. y[dot_one]=.5[y[dot_two]l,y[dot_two]r];
  987. dot([dot_one],[dot_two]);  % dot
  988. math_fit(0,.5ic#); penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
  989.  
  990.  
  991.  
  992.  
  993. dcchar "The letter IJ";
  994. beginchar(oct"234",
  995.   9u#+max(6u#,4u#+cap_stem#)
  996.   if not serifs: -u# fi,cap_height#,0);
  997. italcorr cap_height#*slant-cap_serif_fit#
  998.  +.75cap_jut#-2.5u#+min(.5cap_stem#,u#);
  999. adjust_fit(cap_serif_fit#,cap_serif_fit#);
  1000. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  1001. lft x1l=lft x2l=hround(.5(w-9u)-.5cap_stem); top y1=h; bot y2=0;
  1002. filldraw stroke z1e--z2e; % stem
  1003. if serifs: dish_serif(1,2,a,1/3,1.05cap_jut,b,1/3,1.05cap_jut);  % upper serif
  1004.  dish_serif(2,1,c,1/3,1.05cap_jut,d,1/3,1.05cap_jut);  fi % lower serif
  1005. % J part
  1006. pickup tiny.nib; pos11(cap_stem',0); pos12(cap_stem',0);
  1007. top y11=h; rt x11r=hround(w-2u); x12=x11; y12=.21h;
  1008. if serifs: pos13(vair,-90); pos14(cap_hair,-180);
  1009.  pos15(flare+(cap_stem-stem),-180);
  1010.  bot y13r=-o; x13=.5[x14,x12]; y15=1/6h; rt x15l=hround w-9u+2.75u;
  1011.  z15r=z14r;
  1012.  filldraw stroke z11e--z12e&super_arc.e(12,13);  % stem and arc
  1013.  dish_serif(11,12,aa,1/3,1.3cap_jut,bb,1/3,.75cap_jut);  % serif
  1014.  bulb(13,14,15);  % bulb
  1015. else: filldraw stroke z11e--z12e;  % stem
  1016.  pickup fine.nib; pos13(cap_stem',0); z13=z12;
  1017.  pos14(flare,angle(6.5u,-h)); pos15(1.1flare,-100);
  1018.  bot y14r=-o;
  1019.  x14r=.5[x15r,x13r];
  1020.  lft x15r=hround max(6u,4u+cap_stem)-0.25u;% +.75u;
  1021.  bot y15r=vround.06h-o;
  1022.  filldraw stroke z13e{down}....term.e(14,15,left,1,4); fi % arc and terminal
  1023. math_fit(0,.5ic#-.5u#);
  1024. penlabels(1,2,3,4,5,11,12,13,14,15); endchar;
  1025.  
  1026. iff not suppress_i_dot:
  1027. dcchar "The letter dot I";
  1028. beginchar(oct"235",max(6u#,4u#+cap_stem#),cap_height#+acc_height#,0);
  1029. italcorr cap_height#*slant-.25u#;
  1030. adjust_fit(cap_serif_fit#,cap_serif_fit#);
  1031. pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0);
  1032. lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=cap_height; bot y2=0;
  1033. filldraw stroke z1e--z2e; % stem
  1034. if serifs: dish_serif(1,2,a,1/3,1.05cap_jut,b,1/3,1.05cap_jut);  % upper serif
  1035.  dish_serif(2,1,c,1/3,1.05cap_jut,d,1/3,1.05cap_jut);  fi % lower serif
  1036. math_fit(0,.5ic#);
  1037. % the accent
  1038. dot_one   := 5;
  1039. dot_two   := 6;
  1040. numeric dot_diam#; dot_diam#=max(dot_size#,cap_curve#);
  1041. define_whole_blacker_pixels(dot_diam);
  1042. pickup tiny.nib;
  1043. pos[dot_one](dot_diam,0);
  1044. pos[dot_two](dot_diam,90);
  1045. x[dot_one]=x[dot_two]=.5w;
  1046. top y[dot_two]r=min(asc_height,10/7x_height+.5dot_diam)+acc_height;
  1047. if bot y[dot_two]l<x_height+o+slab:
  1048.    y[dot_two]l:=min(y[dot_two]r-eps,acc_height+x_height+o+slab+.5tiny); fi
  1049. y[dot_one]=.5[y[dot_two]l,y[dot_two]r];
  1050. dot([dot_one],[dot_two]);  % dot
  1051. penlabels(1,2,3,4,5,6); endchar;
  1052.  
  1053.  
  1054. endinput;
  1055.  
  1056.